<?php namespace Home\Controller; 

use Hdphp\Controller\Controller;

//测试控制器
class ListController extends Controller{

	//构造函数
	public function __init()
	{
	}
	
    //动作
    public function index(){
		
       	$cid=Q('get.cid',0,'intval');
		
		$cateData=Db::table('category')->get();
//		p($cateData);

		$cateleader=array();
		$cateleData=Db::table('category')->where('cid',$cid)->get();
		$cateleData=current($cateleData);
		$cateleader[]=$cateleData['cname'];
		if($cateleData['pid']!==0){
			$fatherleData=Db::table('category')->where('cid',$cateleData['pid'])->get();
			$fatherleData=current($fatherleData);
			$cateleader[]=$fatherleData['cname'];
			
		}
		sort($cateleader);
		View::with('cateleader',$cateleader);
//		var_dump($cateleader);
//		以上是获取banner下边的导航数据

		$leftcate=Data::channelLevel($cateData);
//		p($leftcate);die;
		foreach($leftcate as $v){
			foreach($v['_data'] as $kk=>$vv){
				$leftSoncate[]=$vv;
			}
		}
//		p($leftSoncate);die;
		View::with('leftSoncate',$leftSoncate);
//		以上是获取左边的分类数据

		
		$cids=$this->getSonCid($cateData,$cid);
//		p($cids);
		$cids[]=$cid;
		
		$cateGid=Db::table('goods')->where("category_cid in (".implode(',',$cids).")")->lists('gid');
//		p($cateGid);
		$tempAttr=Db::table('goods_attr')->where("goods_gid in (".implode(',', $cateGid).")")->groupBy('ganame')->get();
//		p($tempAttr);
		
		$sameAttr=array();
		foreach($tempAttr as $v){
			$sameAttr[$v['type_attr_taid']][]=$v;
		}
		
//		p($sameAttr);

		$attrData=array();
			foreach($sameAttr as $k=>$v){
				$attrData[]=array(
					'name'=>Db::table('type_attr')->where('taid',$k)->pluck('taname'),
					'value'=>$v
				);
			}
//		p($attrData);
		View::with('attrData',$attrData);
		
		$num=count($attrData);

//		创建一个param参数
//		创建param筛选参数分配到页面，然后页面通过param参数进行筛选
//		填充数组函数:1(填充的序号),2(填充的数量),3(填充的值)
//		array_fill($start_index, $num, $value)
//		var_dump($_GET);die;		
		$param=isset($_GET['param'])?explode('_', $_GET['param']):array_fill(0,$num,0);
		
		View::with('param',$param);
		
//		3-----------通过get参数param来查询对应的商品数据获取分配页面循环
//		创建一个空数组，存储，当前商品属性名，查询到的商品id数据
		$attrGid=array();
		foreach($param as $gaid){
			if($gaid){
//				进行筛选
//				通过gtid参数来获取对应的属性名称
//				1.例如，，取到白色
				$ganame=Db::table('goods_attr')->where('gaid',$gaid)->pluck('ganame');
//				p($ganame);
//				2.查询所有商品属性表里面，是白色属性的所有商品id				
				$attrGid[]=Db::table('goods_attr')->where('ganame',$ganame)->lists('goods_gid');
			}
		}
//				p($attrGid);				
//		如果当前请求的筛选条件为真，有点击param筛选才进行取交集处理		
		if($attrGid){
//		注意，$attrGid是当前查询出来的param筛选条件下的所有商品id
//		但是,筛选条件需要，是重合的商品id才是我们最终需要的结果			
//		取交集,将第一个下表的值存入临时变量	

		$tempgidData=$attrGid[0];
//		var_dump($tempgidData);die;
//		通过得到的所有的商品id数组，进行循环
		foreach($attrGid as $k=>$v){
			
//			array_intersect($array1, $array2)  取交集
			$tempgidData=array_intersect($tempgidData,$v);						
		}	
		
		
//		注意，当前获取的到的商品id是，通过商品属性表（通过相同的颜色名称），查询出来的，商品id结果
//		但是这里不能确定通过商品属性名称查询出来的商品id就是当前请求的分类对应的子集商品id
//		再将通过$attrGid得到的商品id和分类筛选条件的商品id进行取交集
//		这里就是最终结果

		$resultGid=array_intersect($tempgidData,$cateGid);			
				
		}else{
			$resultGid=$cateGid;
		}
		
		if($resultGid){
			$goodsData=Db::table('goods')
			->join('brand b','brand_bid','=','bid')
			->where("gid IN (".implode(',',$resultGid).")")
			->get();
			
		}else{
			$goodsData=array();
		}

		View::with('goodsData',$goodsData);
			   
	   View::make();
    }
	
	
	private function getSonCid($data,$cid){
		$temp=array();
		foreach($data as $k=>$v){
			if($v['pid']==$cid){
				$temp[]=$v['cid'];
				$temp=array_merge($temp,$this->getSonCid($data, $v['cid']));
				
			}
		}				
		return $temp;
	}
}
